package org.dromara.datacheck.mytest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author 刘武贵
 * @Date 2024/11/19 09:36
 * @Description 功能描述：Java爬虫示例
 * 把https://www.pv138.com/idCard/list/中所有的身份证号码都爬取出来。
 * 思路：1.把网址对象创建出来。2.打开连接。3.设置请求头（携带token、带查询条件）。4.读取数据。5.解析数据。6.数据入库。6.关闭连接。
 */
public class JavaReptileTest {
    public static void main(String[] args) throws IOException {
        // 创建一个URL对象，URL就可以把它理解成是一个网址对象
        URL url = new URL("https://www.pv138.com/idCard/list/");
        // openConnection()：打开连接，即连接上这个网址
        // 细节:在运行这行代码的时候需要保证网络是畅通
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // 设置连接超时时间和读取超时时间
        // 5秒
        conn.setConnectTimeout(5000);
        // 5秒
        conn.setReadTimeout(5000);

        // 添加请求头，模拟浏览器请求
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");

        // 创建一个对象去读取网络中的数据
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        // 获取正则表达式的对象pattern
        String regex = "[1-9]\\d{17}";
        Pattern pattern = Pattern.compile(regex);
        // 在读取的时候每次读一整行
        while ((line = br.readLine()) != null) {
          // 拿着文本匹配器的对象matcher按照pattern的规则去读取当前的这一行信息
            Matcher matcher = pattern.matcher(line);
            while (matcher.find()) {
                System.out.println(matcher.group());
            }
        }
        br.close();
    }


}
